package com.cl.code.database.mybatis.util;

/**
 * @author chengliang
 * @since 1.0.0
 */
public class TextUtils {
    /**
     * 将字符串转换为驼峰命名
     *
     * @param input 输入字符串（下划线命名）
     * @return 驼峰命名字符串
     */
    public static String toCamelCase(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }

        StringBuilder result = new StringBuilder();
        boolean nextUpperCase = false;

        for (char c : input.toCharArray()) {
            if (c == '_') {
                nextUpperCase = true; // 下一个字符需要转为大写
            } else {
                if (nextUpperCase) {
                    result.append(Character.toUpperCase(c)); // 转为大写并追加
                    nextUpperCase = false;
                } else {
                    result.append(Character.toLowerCase(c)); // 转为小写并追加
                }
            }
        }

        return result.toString();
    }

    /**
     * 将字符串转换为下划线命名
     *
     * @param input 输入字符串（驼峰命名）
     * @return 下划线命名字符串
     */
    public static String toSnakeCase(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }

        StringBuilder result = new StringBuilder();
        for (char c : input.toCharArray()) {
            if (Character.isUpperCase(c)) {
                // 如果是大写字母，追加下划线并转为小写
                result.append('_').append(Character.toLowerCase(c));
            } else {
                // 否则直接追加
                result.append(c);
            }
        }

        // 如果第一个字符是下划线，去掉它
        if (result.length() > 0 && result.charAt(0) == '_') {
            result.deleteCharAt(0);
        }

        return result.toString();
    }

    /**
     * 将字符串的首字母转换为大写
     *
     * @param input 输入字符串
     * @return 首字母大写的字符串
     */
    public static String firstUpperCase(String input) {
        if (input == null || input.isEmpty()) {
            return input; // 如果为空，直接返回
        }

        char firstChar = input.charAt(0); // 获取第一个字符
        if (Character.isUpperCase(firstChar)) {
            return input; // 如果首字母已经是大写，直接返回原字符串
        }

        // 将首字母转为大写，并拼接剩余部分
        return Character.toUpperCase(firstChar) + input.substring(1);
    }


}
